package com.yfp.operation.service;

import com.yfp.common.core.domain.R;
import com.yfp.operation.domain.CPComboRoad;
import com.yfp.operation.domain.ComboPlan;
import com.yfp.operation.domain.ComboPlanDevice;
import com.yfp.operation.domain.PlacementPlan;
import com.yfp.operation.domain.dto.*;
import com.yfp.operation.domain.vo.EnterpriseOrderVO;
import com.yfp.operation.domain.dto.*;

import java.util.List;

/**
 * 
 * @version 1.0
 * @date 2024-06-26 12:16
 */
public interface ThrowPlanService {
    /**
     * 获取计划组列表
     * @param gainPlacementPlanDTO
     * @return
     */
    R<List<PlacementPlan>> getAllPlan(GainPlacementPlanDTO gainPlacementPlanDTO);

    /**
     * 新增计划组
     * @param insertPlacementPlanDTO
     * @return
     */
    R<Void> addPlan(InsertPlacementPlanDTO insertPlacementPlanDTO);

    /**
     * 修改计划组
     * @param updatePlacementPlanDTO
     * @return
     */
    R<Void> updatePlan(UpdatePlacementPlanDTO updatePlacementPlanDTO);

    /**
     * 删除计划组
     * @param placementPlan
     * @return
     */
    R<Void> deleteByPlanId(PlacementPlan placementPlan);

    /**
     * 获取投放餐品计划列表
     * @param gainComboPlanDTO
     * @return
     */
    List<ComboPlan> getAllComboPlan(GainComboPlanDTO gainComboPlanDTO);

    /**
     * 新增套餐计划
     * @param comboPlanDTO
     * @return
     */
    R<Void> addComboPlan(ComboPlanDTO comboPlanDTO);

    /**
     * 修改套餐计划
     * @param comboPlanDTO
     * @return
     */
    R<Void> updateComboPlan(ComboPlanDTO comboPlanDTO);

    /**
     * 根据企业订单生成投放计划
     * @param enterpriseOrderVO
     */
    void autoEnterprisePlacementPlan(EnterpriseOrderVO enterpriseOrderVO);

    /**
     * 删除企业投放计划
     * @param machineId
     */
    void delEnterprisePlacementPlan(String machineId);

    /**
     * 修改状态
     * @param cPlanId
     * @param status
     * @return
     */
    R<Void> updateStatus(String cPlanId, String status);

    /**
     * 根据餐品计划id获取设备信息
     * @param cPlanId
     * @return
     */
    R<List<ComboPlanDevice>> getByMachineName(String cPlanId);

    /**
     * 根据餐品计划id获取货道餐品信息
     * @param cPlanId
     * @return
     */
    R<List<CPComboRoad>> getComboName(String cPlanId);

    /**
     * 投放餐品计划选择商品下架
     * @param comboSoldOutDTO
     * @return
     */
    R<Void> comboSoldOut(ComboSoldOutDTO comboSoldOutDTO);

    /**
     * 修改计划组状态
     * @return
     */
    R<Void> updatePlanStatus();

    /**
     * 定时修改套餐计划为结束状态
     * @return
     */
    R<Void> updateComboPlanStatus();


}
